package edu.scsw.tech.unit3;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

// 学生类
class Student {
    private String name;        // 学生姓名
    private LocalDate birthDate; // 出生日期
    private String gender;      // 性别
    private String major;       // 专业
    private String studentId;   // 学号

    // 默认构造方法
    public Student() {
    }

    // 带参数的构造方法
    public Student(String name, String birthDate, String gender, String major, String studentId) {
        this.name = name;
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        this.birthDate = LocalDate.parse(birthDate, formatter); // 解析字符串格式的日期
        this.gender = gender;
        this.major = major;
        this.studentId = studentId;
    }

    // Getter 和 Setter 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public LocalDate getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(String birthDate) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        this.birthDate = LocalDate.parse(birthDate, formatter); // 解析字符串格式的日期
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }

    // 显示学生信息的方法
    public void displayStudentInfo() {
        System.out.println("学生学号: " + studentId);
        System.out.println("学生姓名: " + name);
        System.out.println("学生出生日期: " + birthDate);
        System.out.println("学生性别: " + gender);
        System.out.println("学生专业: " + major);
    }
}

// 学生管理类
public class StudentManagement {
    private List<Student> students; // 存储学生列表
    private Scanner scanner; // 用于用户输入

    // 静态成员变量，记录学生总数
    private static int studentCount = 0;

    // 默认构造方法
    public StudentManagement() {
        students = new ArrayList<>(); // 初始化学生列表
        scanner = new Scanner(System.in); // 初始化扫描器
    }

    // 添加学生的方法
    public void addStudent() {
        System.out.print("请输入学生学号: ");
        String studentId = scanner.nextLine();

        System.out.print("请输入学生姓名: ");
        String name = scanner.nextLine();

        System.out.print("请输入学生出生日期 (格式: yyyy-MM-dd): ");
        String birthDate = scanner.nextLine();

        System.out.print("请输入学生性别: ");
        String gender = scanner.nextLine();

        System.out.print("请输入学生专业: ");
        String major = scanner.nextLine();

        // 使用输入的信息创建一个新的Student对象
        Student student = new Student(name, birthDate, gender, major, studentId);
        students.add(student); // 将新的学生添加到学生列表中
        studentCount++; // 增加学生总数计数器
        System.out.println("学生添加成功！");
    }

    // 删除学生的方法
    public void deleteStudent() {
        System.out.print("请输入要删除的学生学号: ");
        String studentId = scanner.nextLine();

        Iterator<Student> iterator = students.iterator();
        while (iterator.hasNext()) {
            Student student = iterator.next();
            if (student.getStudentId().equals(studentId)) {
                iterator.remove();
                studentCount--; // 减少学生总数计数器
                System.out.println("学生删除成功！");
                return;
            }
        }
        System.out.println("未找到学生信息。");
    }

    // 修改学生信息的方法
    public void updateStudent() {
        System.out.print("请输入要更新的学生学号: ");
        String studentId = scanner.nextLine();

        for (Student student : students) {
            if (student.getStudentId().equals(studentId)) {
                System.out.print("请输入新的学号: ");
                student.setStudentId(scanner.nextLine());

                System.out.print("请输入新的姓名: ");
                student.setName(scanner.nextLine());

                System.out.print("请输入新的出生日期 (格式: yyyy-MM-dd): ");
                student.setBirthDate(scanner.nextLine());

                System.out.print("请输入新的性别: ");
                student.setGender(scanner.nextLine());

                System.out.print("请输入新的专业: ");
                student.setMajor(scanner.nextLine());

                System.out.println("学生信息更新成功！");
                return;
            }
        }
        System.out.println("未找到学生信息。");
    }

    // 查询学生信息的方法
    public void findStudent() {
        System.out.print("请输入要查找的学生学号: ");
        String studentId = scanner.nextLine();

        for (Student student : students) {
            if (student.getStudentId().equals(studentId)) {
                student.displayStudentInfo(); // 显示找到的学生的信息
                return;
            }
        }
        System.out.println("未找到学生信息。");
    }

    // 显示所有学生信息的方法
    public void displayAllStudents() {
        if (students.isEmpty()) {
            System.out.println("没有学生信息。");
        } else {
            for (Student student : students) {
                student.displayStudentInfo(); // 显示每个学生的信息
                System.out.println();
            }
        }
    }

    // 获取学生总数的静态方法
    public static int getStudentCount() {
        return studentCount;
    }

    // 显示学生总数的方法
    public static void displayStudentCount() {
        System.out.println("当前学生总数: " + studentCount);
    }

    // 运行学生管理系统的方法
    public void run() {
        while (true) {
            System.out.println("\n学生管理系统菜单:");
            System.out.println("1. 添加学生");
            System.out.println("2. 删除学生");
            System.out.println("3. 修改学生信息");
            System.out.println("4. 查询学生信息");
            System.out.println("5. 显示所有学生信息");
            System.out.println("6. 显示学生总数");
            System.out.println("7. 退出");
            System.out.print("请选择操作: ");

            int choice = scanner.nextInt();
            scanner.nextLine(); // 清除行尾的换行符

            switch (choice) {
                case 1:
                    addStudent();
                    break;
                case 2:
                    deleteStudent();
                    break;
                case 3:
                    updateStudent();
                    break;
                case 4:
                    findStudent();
                    break;
                case 5:
                    displayAllStudents();
                    break;
                case 6:
                    displayStudentCount(); // 调用静态方法显示学生总数
                    break;
                case 7:
                    System.out.println("退出学生管理系统。");
                    scanner.close();
                    return;
                default:
                    System.out.println("无效的选择，请重新输入。");
            }
        }
    }

    public static void main(String[] args) {
        StudentManagement system = new StudentManagement();
        system.run(); // 运行学生管理系统
    }
}
